#include "mynet.h"
#include <stdio.h>
#include <stdlib.h>

/* ---------- TCP 实现 ---------- */
static int tcp_open(void) {
    printf("[TCP] open socket\n");
    return 42; // 模拟返回 fd
}
static int tcp_close(int fd) {
    printf("[TCP] close %d\n", fd);
    return 0;
}

/* ---------- UDP 实现 ---------- */
static int udp_open(void) {
    printf("[UDP] open socket\n");
    return 43;
}
static int udp_close(int fd) {
    printf("[UDP] close %d\n", fd);
    return 0;
}

/* ---------- 函数指针表 ---------- */
static net_ops_t tcp_ops = { .open = tcp_open, .close = tcp_close };
static net_ops_t udp_ops = { .open = udp_open, .close = udp_close };

/* ---------- 工厂函数 ---------- */
net_ctx_t *net_create(net_type_t type) {
    net_ctx_t *ctx = (net_ctx_t *)malloc(sizeof(net_ctx_t));
    if (!ctx) return NULL;
    ctx->type = type;
    ctx->ops = (type == TCP) ? tcp_ops : udp_ops;
    return ctx;
}

/* ---------- 统一接口 ---------- */
int net_open(net_ctx_t *ctx) {
    if (!ctx  || !ctx->ops.open) return -1;
    return ctx->ops.open();
}

int net_close(net_ctx_t *ctx, int fd) {
    if (!ctx ||  !ctx->ops.close) return -1;
    return ctx->ops.close(fd);
}